package com.unitd.frame.mybatis.core.service.impl;

import com.unitd.frame.mybatis.core.dao.ICrudDao;
import com.unitd.frame.mybatis.core.service.ICrudService;

import java.util.List;

/**
 * @desc CrudServiceImpl 的实现类,其他的自定义 ServiceImpl,继承自它,可以获得常用的增删查改操作,未实现的方法由子类各自实现
 * @param <Model> 代表数据库中的表 映射的Java对象类型
 * @param <PK> 对象的主键类型
 * @filename CrudServiceImpl.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2017/2/22
 */
public abstract class CrudServiceImpl<Model, PK> extends BaseServiceImpl<Model, PK> implements ICrudService<Model, PK> {

	/**
	 * @desc 定义成抽象方法,由子类实现,完成dao的注入
	 * @return GenericDao实现类
	 */
	@Override
	public abstract ICrudDao<Model, PK> getDao();

	/* 根据现实业务和表结构新增的方法,可以关联多表查询和处理 */
	/**
	 * @param id 主键ID
	 * @return
	 * @desc 获取单条数据
	 */
	@Override
	public Model findBy(PK id) {
		return getDao().findBy(id);
	}

	/**
	 * @param entity 查询参数对象
	 * @return List<Model>
	 * @desc 查询数据列表，如果需要分页，请设置分页对象，如：entity.setPage(new Page<T>());
	 */
	@Override
	public List<Model> findListBy(Model entity) {
		return getDao().findListBy(entity);
	}

	/**
	 * @param entity 查询参数对象
	 * @return List<Model>
	 * @desc 查询所有数据列表
	 */
	@Override
	public List<Model> findAllData(Model entity) {
		return getDao().findAllData(entity);
	}

	/**
	 * @desc 根据参数信息, 逻辑删除生成方案表对象信息
	 * @param entity  删除参数对象
	 */
	@Override
	public int deleteByDelFlag(Model entity) {
		return getDao().deleteByDelFlag(entity);
	}
}